package com.example.demo.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.dto.EntryAmountDtlDto;
import com.example.demo.dto.EntryAmountDto;
import com.example.demo.dto.LoanAmountDtlDto;
import com.example.demo.dto.LoanAmountDto;
import com.example.demo.dto.OrderInfoTypeDtlDto;
import com.example.demo.dto.OrderInfoTypeDto;
import com.example.demo.service.IAutoOrderInfoService;
import com.example.demo.utils.CommonUtil;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * <p>
 * 车险订单表 前端控制器
 * </p>
 *
 * @author xie.m
 * @since 2018-10-19
 */
@RestController
@RequestMapping("/auto-order-info")
@Api
public class AutoOrderInfoController {

	@Autowired
	private IAutoOrderInfoService iAutoOrderInfoService;

	/**
	 * 查询业务类型分布
	 * 
	 * @param queryType
	 *            查询类型，1-放款笔数，2-放款金额
	 * @param startDate
	 *            开始时间（待定）
	 * @param endDate
	 *            结束时间（待定）
	 * @return
	 */
	@GetMapping("/query-order-type")
	public OrderInfoTypeDto queryOrderType(Integer queryType, Date startDate, Date endDate) {

		OrderInfoTypeDto dto = new OrderInfoTypeDto();
		List<OrderInfoTypeDtlDto> data = dto.getData();

		OrderInfoTypeDtlDto dtl1 = new OrderInfoTypeDtlDto();
		dtl1.setName("aa");
		dtl1.setValue(22D);

		OrderInfoTypeDtlDto dtl2 = new OrderInfoTypeDtlDto();
		dtl2.setName("bb");
		dtl2.setValue(232D);

		OrderInfoTypeDtlDto dtl3 = new OrderInfoTypeDtlDto();
		dtl3.setName("ccc");
		dtl3.setValue(111D);
		dto.setData(data);

		data.add(dtl1);
		data.add(dtl2);
		data.add(dtl3);
		return dto;
	}

	/**
	 * 查询放款金额
	 * 
	 * @param queryType（待定，是否兼容放款笔数）
	 *            查询类型，1-放款笔数，2-放款金额
	 * @param startDate
	 *            开始时间
	 * @param endDate
	 *            结束时间
	 * @return
	 */
	@GetMapping("/query-loan-amount")
	public LoanAmountDto queryLoanAmount(Integer queryType, Date startDate, Date endDate) {
		LoanAmountDto dto = new LoanAmountDto();
		LoanAmountDtlDto dtl = new LoanAmountDtlDto();
		String[] dates = { "9-11", "9-13", "9-15", "9-17" };
		Double[] amounts = { 122D, 333D, 11D, 2000D };
		// dtl.setAmounts(Arrays.asList(amounts));
		// dtl.setDates(Arrays.asList(dates));
		// dto.setData(dtl);
		return dto;
	}

	/**
	 * 查询进件成功率（金额）
	 * 
	 * @param queryType（待定，是否兼容笔数）
	 *            查询类型，1-笔数，2-金额
	 * @param orderType
	 *            订单类型（1-全部[默认值]，12-个车，3-团车）
	 * @param startDate
	 *            开始时间
	 * @param endDate
	 *            结束时间
	 * @return
	 */
	@GetMapping("/query-entry-amount")
	public EntryAmountDto queryEntryAmount(Integer queryType, Integer orderType, Date startDate, Date endDate) {
		EntryAmountDto dto = new EntryAmountDto();
		EntryAmountDtlDto dtl = new EntryAmountDtlDto();

		dtl.setApplicationAmonut(7333D);
		dtl.setSuccessLoanAmount(6888D);
		String[] dates = { "9-11", "9-13", "9-15", "9-17" };
		Double[] amounts = { 122D, 333D, 11D, 2000D };
		dtl.setDates(Arrays.asList(dates));
		dtl.setAmounts(Arrays.asList(amounts));
		dto.setData(dtl);
		return dto;
	}

	/**
	 * 查询累计放款金额（参考查询进件成功率接口，实体另外单独写）
	 * 
	 * @param orderType
	 *            订单类型（1-全部[默认值]，12-个车，3-团车）
	 * @param startDate
	 *            开始时间
	 * @param endDate
	 *            结束时间
	 * @return
	 */
	@GetMapping("/query-total-loan-amount")
	public EntryAmountDto queryTotalLoanAmount(Integer orderType, Date startDate, Date endDate) {
		return new EntryAmountDto();
	}

	/**
	 * 查询累计放款金额（参考查询进件成功率接口，实体另外单独写）
	 * 
	 * @param orderType
	 *            订单类型（1-全部[默认值]，12-个车，3-团车）
	 * @param startDate
	 *            开始时间
	 * @param endDate
	 *            结束时间
	 * @return
	 */
	@GetMapping("/test1")
	@ApiOperation("查询累计放款金额")
	public LoanAmountDto test(Integer queryType, Date startDate, Date endDate) {
		List<LoanAmountDtlDto> dtls = iAutoOrderInfoService.test("2018");
		List<String> allMonths = new ArrayList<String>() {
			{
				add("1");
				add("2");
				add("3");
				add("4");
				add("5");
				add("6");
				add("7");
				add("8");
				add("9");
				add("10");
				add("11");
				add("12");
			}
		};

		if (CommonUtil.hasValue(dtls)) {
			List<String> dbMonths = new ArrayList<>();
			for (LoanAmountDtlDto dtl : dtls) {
				dbMonths.add(dtl.getMonth());
			}

			// 取差
			allMonths.removeAll(dbMonths);
			if (CommonUtil.hasValue(allMonths)) {
				for (String month : allMonths) {
					LoanAmountDtlDto dtl = new LoanAmountDtlDto();
					dtl.setMonth(month);
					dtl.setAmount(0D);
				}
			}
		}
		LoanAmountDto dto = new LoanAmountDto();
		dto.setData(dtls);
		return dto;
	}
}
